#include <stdio.h>
//地址是指的是内存的地址

// 在同一个系统下，不管指向什么类型的变量，地址的大小总是一样的
// 32位系统是4
// 64位系统是8
int main()
{
    char *p1;
    //定义一个char类型的指针变量p1,开辟了一个p1指针的地址空间，但是没有地址的值
    int *p2;
    //定义一个int类型的指针变量p2,开辟了一个p2指针的地址空间，但是没有地址的值
    long long *p3;
    //定义一个long long类型的指针变量p3,开辟了一个p3指针的地址空间，但是没有地址的值
    printf("%lu, %lu, %lu\n", sizeof(p1), sizeof(p2), sizeof(p3));

    int a = 0;
    // 把变量a的地址，赋值给p2，指针p2的地址就指向了a的地址
    p2 = &a;

    // 把指针p2指向a的地址的值赋值为10,等于a=10
    *p2 = 10;

    int *p21;
    // 把变量a的地址，赋值给p21，指针p21的地址就指向了a的地址
    p21 = &a;
    //*p21是什么？
    
    //但p2和p21确实两个不同的指针变量,都指向了a的地址
    printf("但p2和p21确实两个不同的指针变量,都指向了a的地址\n");
    printf("p2 = %p, p21 =  %p\n", p2, p21);

    //不管是*p2,还是*p21都代表变量a的值
    printf("a = %d, *p2 =  %d, *p21 =  %d\n", a, *p2, *p21);
    return 0;
}

